.\"
.\" This file and its contents are supplied under the terms of the
.\" Common Development and Distribution License ("CDDL"), version 1.0.
.\" You may only use this file in accordance with the terms of version
.\" 1.0 of the CDDL.
.\"
.\" A full copy of the text of the CDDL should have accompanied this
.\" source.  A copy of the CDDL is also available via the Internet at
.\" http://www.illumos.org/license/CDDL.
.\"
.\"
.\" Copyright 2015 Joyent, Inc.
.\"
.Dd May 11, 2016
.Dt PGRAB_CORE 3PROC
.Os
.Sh NAME
.Nm Pgrab_core ,
.Nm Pfgrab_core
.Nd grab a core file
.Sh LIBRARY
.Lb libproc
.Sh SYNOPSIS
.In libproc.h
.Ft "struct ps_prochandle *"
.Fo Pgrab_core
.Fa "const char *core"
.Fa "const char *aout"
.Fa "int gflag"
.Fa "int *perr"
.Fc
.Ft "struct ps_prochandle *"
.Fo Pfgrab_core
.Fa "int core_fd"
.Fa "const char *aout"
.Fa "int *perr"
.Fc
.Sh DESCRIPTION
The
.Fn Pgrab_core
and
.Fn Pfgrab_core
functions open a core file for introspection.
Unlike live processes, core files cannot have their state modified;
however, all of the functions that iterate or query state will work.
These functions work on all illumos core files and the core files of some other
operating systems.
See both
.Xr core 5
and the
.Em Core Files
section of
.Xr libproc 3LIB
for more information.
.Pp
The
.Fn Pgrab_core
function attempts to open the core file specified by
.Fa core .
The system attempts to determine the path of the original executable.
The argument
.Fa aout
may either be the path to that file, a path to a directory to search, or the
.Dv NULL
pointer, if neither is known.
The system will search for it and will supplement information in the core file
with that.
.Pp
The
.Fa gflag
argument to the
.Fn Pgrab_core
function controls how the file is opened.
If the
.Dv PGRAB_RDONLY
flag is specified, then the core file will be opened with the
.Xr open 2
flag
.Dv O_RDONLY .
Otherwise, it will be opened
.Dv O_RDWR .
.Pp
The
.Fa perr
argument must be a
.Pf non- Dv NULL
pointer which will store a more detailed error in the event that the
.Fn Pgrab_core
function fails.
A human-readable form of the error can be obtained through the routine
.Xr Pgrab_error 3PROC .
.Pp
The
.Fn Pfgrab_core
is similar to the
.Fn Pgrab_core
function.
Except, instead of operating on a path, it opens a handle to the core file
referenced by
.Fa core_fd .
The
.Fa aout
and
.Fa perr
arguments are identical to those in the
.Fn Pgrab_core
function.
.Pp
The handle returned, from either function, is valid until it is closed
with
.Xr Prelease 3PROC
or
.Xr Pfree 3PROC .
.Sh RETURN VALUES
Upon successful completion, the
.Fn Pgrab_core
and
.Fn Pfgrab_core
functions return a
.Sy libproc
handle to the core file.
Otherwise,
.Dv NULL
is returned and
.Fa perr
is filled in with a more detailed error message.
.Sh ERRORS
The
.Fn Pgrab_core
function will fail if:
.Bl -tag -width Er
.It Er G_NOCORE
The file
.Fa core
does not exist.
.It Er G_STRANGE
An unexpected system error occurred while trying to open
.Fa core .
The value of
.Sy errno
indicates the system failure.
.El
.Pp
The
.Fn Pgrab_core
and
.Fn Pfgrab_core
functions will fail if:
.Bl -tag -width Er
.It Dv G_ELF
An unexpected
.Xr libelf 3LIB
failure occurred.
.It Dv G_FORMAT
The core file referred to by either
.Fa core
or
.Fa core_fd
is not a valid ELF core file.
.It Dv G_ISAINVAL
The architecture of the core file referred to by either
.Fa core
or
.Fa core_fd
does not match the current running system.
.It Dv G_LP64
The calling process is a 32-bit process and the core file referenced by
either
.Fa core
or
.Fa core_fd
refers to a 64-bit process.
.It Dv G_NOTE
The ELF notes present in the core file referred to by either
.Fa core
or
.Fa core_fd
are corrupt or missing required data.
.It Dv G_STRANGE
An unanticipated system error occurred while trying to open the core
file and create the handle.
The value of
.Sy errno
indicates the system failure.
.El
.Sh INTERFACE STABILITY
.Sy Uncommitted
.Sh MT-LEVEL
.Sy MT-Safe
.Sh SEE ALSO
.Xr gcore 1 ,
.Xr open 2 ,
.Xr errno 3C ,
.Xr libproc 3LIB ,
.Xr Pfree 3PROC ,
.Xr Pgrab_error 3PROC ,
.Xr Prelease 3PROC ,
.Xr core 5
